using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Comercial.Procesos;
using Marlimer.Comercial.Consultas;
using Marlimer.Comercial.Mantenimientos;
using Marlimer.Comercial.Reportes.Formularios;
using Marlimer.Comercial.Distribucion;
using Marlimer.Logical.Formularios;
using Marlimer.Common.Entidades;
using Marlimer.Logical.Sistema;

namespace Marlimer.Comercial
{
    public partial class MDI_Principal : Form
    {
        private Boolean terminar = false;
        //la aplicacion de codigo 1 es la comercial
        private int ccod_appl = Session.getInfousuario().ccod_appl;


        public MDI_Principal()
        {
            InitializeComponent();
        }

        private void MDI_Principal_Load(object sender, EventArgs e)
        {
            //si no se logeo correctamente se anula
            if (Session.getInfousuario().ccod_user == 0)
            {
                terminar = true;
                MessageBox.Show("Para ingresar a la aplicacion debe logearse previamente. Se cerrara la aplicacion", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Application.Exit();
            }
            else
            {
                String nomUsuario = "";
                nomUsuario = "   Usuario: " + Session.getInfousuario().cape_pat + " " + Session.getInfousuario().cape_mat + ", " + Session.getInfousuario().cnombres;
                staPrincipal.Items[0].Text = nomUsuario;
                staPrincipal.Items[1].Text = "   Nombre PC: " + Session.getComputerName();
                staPrincipal.Items[2].Text = "   Usuario PC: " + Session.getInfoUserWindows();
                if (Session.Empresa == enumGlobal.enumEmpresas.Marlimer)
                {
                    this.Text = "Sistema Comercial MARLIMER" + " - Login: " + Session.getInfousuario().clogin;
                }
                else
                {
                    this.Text = "Sistema Comercial ALIMER" + " - Login: " + Session.getInfousuario().clogin;
                }
            }

            //crear los menus en las tablas
            //crearMenus();
 
            //establecer las opciones/accesos que tiene el usuario
            doEstablecerMenus();  
        }

        private void mnuProcesos_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuProcesos.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:     //pedidos
                    {
                        frm_Pedidos Frm_Pedidos = new frm_Pedidos();
                        Frm_Pedidos.MdiParent = this;
                        Frm_Pedidos.Show();
                        break;
                    }
                case 1:     //generar Documentos
                    {
                        frm_GenerarDocumentos Frm_GenerarDocumentos = new frm_GenerarDocumentos();
                        //Frm_GenerarDocumentos.MdiParent = this;
                        Frm_GenerarDocumentos.ShowDialog();
                        break;
                    }
                case 2:     //documentos
                    {
                        frm_Documentos Frm_Documentos = new frm_Documentos();
                        Frm_Documentos.MdiParent = this;
                        Frm_Documentos.Show();
                        break;
                    }
                case 3:     //guia remision
                    {
                        frm_GuiaRemision Frm_GuiaRemision = new frm_GuiaRemision();
                        Frm_GuiaRemision.MdiParent = this;
                        Frm_GuiaRemision.Show();
                        break;
                    }
                case 4:
                    {
                        frm_NotasCredito Frm_NotasCredito = new frm_NotasCredito();
                        Frm_NotasCredito.MdiParent = this;
                        Frm_NotasCredito.Show();
                        break; 
                    }
                case 6:     //autorizar documentos /pedidos
                    {
                        frm_AutorizarPedidos Frm_AutorizarPedidos = new frm_AutorizarPedidos();
                        Frm_AutorizarPedidos.MdiParent = this;
                        Frm_AutorizarPedidos.Show();
                        break;
                    }
                case 7:
                    {
                        frm_AsignarTransportista Frm_AsignarTransportista = new frm_AsignarTransportista();
                        Frm_AsignarTransportista.MdiParent = this;
                        Frm_AsignarTransportista.Show();
                        break;
                    }
                case 9:     //promociones
                    {
                        frm_Promociones Frm_Promociones = new frm_Promociones();
                        Frm_Promociones.MdiParent = this;
                        Frm_Promociones.Show();
                        break;
                    }
                case 10:
                    {
                        frm_CargarPedidosWAP Frm_CargarPedidosWAP = new frm_CargarPedidosWAP();
                        Frm_CargarPedidosWAP.MdiParent = this;
                        Frm_CargarPedidosWAP.Show();
                        break;
                    }
                case 11:    //precios por canal
                    {
                        frm_PreciosCanal FrmPreciosCanal = new frm_PreciosCanal();
                        FrmPreciosCanal.MdiParent = this;
                        FrmPreciosCanal.Show();
                        break;
                    }
                case 12:
                    {
                        /*frm_ObjVentasRuta Frm_ObjVentasRuta = new frm_ObjVentasRuta();
                        Frm_ObjVentasRuta.MdiParent = this;
                        Frm_ObjVentasRuta.Show();  
                         * */
                        frm_ComisionProducto Frm_ComisionProducto = new frm_ComisionProducto();
                        Frm_ComisionProducto.MdiParent = this;
                        Frm_ComisionProducto.Show(); 
                        break;
                    }
                case 13:
                    {
                        frm_Pedidos frm_Pedidos = new frm_Pedidos(false, true);
                        frm_Pedidos.MdiParent = this;
                        frm_Pedidos.Show();  
                        break; 
                    }
                case 14:
                    {
                        frm_ObjVentasGeneral Frm_ObjVentasGeneral = new frm_ObjVentasGeneral();
                        Frm_ObjVentasGeneral.MdiParent = this;
                        Frm_ObjVentasGeneral.Show();
                        break; 
                    }
                case 15:
                    {
                        frm_ProductoDropSize Frm_ProductoDropSize = new frm_ProductoDropSize();
                        Frm_ProductoDropSize.MdiParent = this;
                        Frm_ProductoDropSize.Show();
                        break;  
                    }
                case 17:
                    {
                        frm_ProcExportarDatosNextel FrmExportarDatosNextel = new frm_ProcExportarDatosNextel();
                        FrmExportarDatosNextel.ShowDialog(); 
                        break; 
                    }
            }
        }

        private void MDI_Principal_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!terminar)
            {
                if (MessageBox.Show("Seguro que desea cerrar?", Session.getParametros().tituloAppCom, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    terminar = true;
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void MDI_Principal_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (terminar)
            {
                Application.Exit(); 
            }
        }

        private void mnuConsultas_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuConsultas.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_ConsultaClientes Frm_ConsultaClientes = new frm_ConsultaClientes();
                        Frm_ConsultaClientes.MdiParent = this;
                        Frm_ConsultaClientes.Show(); 
                        break;
                    }
                case 1:
                    {
                        frm_ConsultaPedidos Frm_ConsultaPedidos = new frm_ConsultaPedidos();
                        Frm_ConsultaPedidos.MdiParent = this; 
                        Frm_ConsultaPedidos.Show();  
                        break;
                    }
                case 2:
                    {
                        frm_ConsultaDocumentos Frm_ConsultaDocumentos = new frm_ConsultaDocumentos();
                        Frm_ConsultaDocumentos.MdiParent = this;
                        Frm_ConsultaDocumentos.Show();  
                        break;
                    }
                case 3:
                    {
                        frm_ConsultaNotasCredito Frm_ConsultaNotasCredito = new frm_ConsultaNotasCredito();
                        Frm_ConsultaNotasCredito.MdiParent = this;
                        Frm_ConsultaNotasCredito.Show();
                        break; 
                    }
                case 4:
                    {
                        frm_ConsultaPromociones Frm_ConsultaPromociones = new frm_ConsultaPromociones();
                        Frm_ConsultaPromociones.MdiParent = this;
                        Frm_ConsultaPromociones.Show();
                        break; 
                    }
                case 5:
                    {
                        frm_ConsultaGuiasRemision Frm_ConsultaGuiasRemision = new frm_ConsultaGuiasRemision();
                        Frm_ConsultaGuiasRemision.MdiParent = this;
                        Frm_ConsultaGuiasRemision.Show();  
                        break; 
                    }
                case 6:
                    {
                        frm_ConsultaRechazosConsecutivos Frm_ConsultaRechazosConsecutivos = new frm_ConsultaRechazosConsecutivos();
                        Frm_ConsultaRechazosConsecutivos.MdiParent = this;
                        Frm_ConsultaRechazosConsecutivos.Show(); 
                        break; 
                    }
            }
        }

        private void mnuMantenimiento_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuMantenimiento.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_Clientes Frm_Clientes = new frm_Clientes();
                        Frm_Clientes.MdiParent = this;
                        Frm_Clientes.Show();
                        break;
                    }
                case 1:
                    {
                        frm_Modulo Frm_Modulo = new frm_Modulo();
                        Frm_Modulo.MdiParent = this;
                        Frm_Modulo.Show();  
                        break;
                    }
                case 2:
                    {
                        frm_Ruta Frm_Ruta = new frm_Ruta();
                        Frm_Ruta.MdiParent = this;
                        Frm_Ruta.Show();
                        break;
                    }
                case 3:
                    {
                        frm_Vendedor Frm_Vendedor = new frm_Vendedor();
                        Frm_Vendedor.MdiParent = this;
                        Frm_Vendedor.Show();  
                        break; 
                    }
                case 4:
                    {
                        frm_Zona Frm_Zona = new frm_Zona();
                        Frm_Zona.MdiParent = this;
                        Frm_Zona.Show();
                        break; 
                    }
                case 5:
                    {
                        frm_Supervisor Frm_Supervisor = new frm_Supervisor();
                        Frm_Supervisor.MdiParent = this;
                        Frm_Supervisor.Show();  
                        break;
                    }
                case 6:
                    {
                        frm_Transportista Frm_Transportista = new frm_Transportista();
                        Frm_Transportista.MdiParent = this;
                        Frm_Transportista.Show();
                        break; 
                    }
                case 7:
                    {
                        frm_Cobrador Frm_Cobrador = new frm_Cobrador();
                        Frm_Cobrador.MdiParent = this;
                        Frm_Cobrador.Show();
                        break; 
                    }
                case 9:
                    {
                        frm_CalendarioLaboral Frm_CalendarioLaboral = new frm_CalendarioLaboral();
                        Frm_CalendarioLaboral.MdiParent = this;
                        Frm_CalendarioLaboral.Show();
                        break; 
                    }
            }
        }

        private void mnuCaja_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuCaja.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_PagoDocumentoMasivo Frm_PagoDocumentoMasivo = new frm_PagoDocumentoMasivo();
                        Frm_PagoDocumentoMasivo.MdiParent = this;
                        Frm_PagoDocumentoMasivo.Show();  
                        break;
                    }
                case 1:
                    {
                        frm_PagoDocumento Frm_PagoDocumento = new frm_PagoDocumento();
                        Frm_PagoDocumento.MdiParent = this;
                        Frm_PagoDocumento.Show();
                        break; 
                    }
            }
        }

        private void mnuReportes_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuReportes.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_CargaXTransportista Frm_CargaXTransportista = new frm_CargaXTransportista();
                        Frm_CargaXTransportista.MdiParent = this;
                        Frm_CargaXTransportista.Show();  
                        break;
                    }
                case 1:     //impresion de documentos de venta
                    {
                        frm_PrintDocumentos Frm_PrintDocumentos = new frm_PrintDocumentos();
                        Frm_PrintDocumentos.MdiParent = this;
                        Frm_PrintDocumentos.Show();
                        break; 
                    }
                case 3:
                    {
                        frm_PadronClientes Frm_PadronClientes = new frm_PadronClientes();
                        Frm_PadronClientes.MdiParent = this;
                        Frm_PadronClientes.Show();  
                        break;
                    }
                case 4:
                    {
                        frm_RepKPI Frm_RepKPI = new frm_RepKPI();
                        Frm_RepKPI.MdiParent = this;
                        Frm_RepKPI.Show(); 
                        break;
                    }
                case 5:
                    {
                        frm_RepAnalisisVenta Frm_RepAnalisisVenta = new frm_RepAnalisisVenta();
                        Frm_RepAnalisisVenta.MdiParent = this;
                        Frm_RepAnalisisVenta.Show();
                        break;
                    }
                case 6:
                    {
                        frm_RepVentas Frm_VentasXProductoXVendedor = new frm_RepVentas();
                        Frm_VentasXProductoXVendedor.MdiParent = this;
                        Frm_VentasXProductoXVendedor.Show();  
                        break;
                    }
                case 7:
                    {
                        frm_RepDevoluciones Frm_DevolucionXVendedor = new frm_RepDevoluciones();
                        Frm_DevolucionXVendedor.MdiParent = this;
                        Frm_DevolucionXVendedor.Show();  
                        break;
                    }
                case 8:
                    {
                        frm_RepPedidos Frm_RepPedidos = new frm_RepPedidos();
                        Frm_RepPedidos.MdiParent = this;
                        Frm_RepPedidos.Show();  
                        break; 
                    }
                case 10:
                    {
                        frm_RepPagos Frm_RepPagos = new frm_RepPagos();
                        Frm_RepPagos.MdiParent = this;
                        Frm_RepPagos.Show();  
                        break; 
                    }
                case 11:
                    {
                        frm_RepPendientesPagos Frm_RepPendientesPagos = new frm_RepPendientesPagos();
                        Frm_RepPendientesPagos.MdiParent = this;
                        Frm_RepPendientesPagos.Show();  
                        break;
                    }
                case 12:
                    {
                        frm_RegistroVentas Frm_RegistroVentas = new frm_RegistroVentas();
                        Frm_RegistroVentas.MdiParent = this;
                        Frm_RegistroVentas.Show();  
                        break;
                    }
                case 13:
                    {
                        frm_RepKardexValorizado Frm_RepKardexValorizado = new frm_RepKardexValorizado();
                        Frm_RepKardexValorizado.MdiParent = this;
                        Frm_RepKardexValorizado.Show();  
                        break;
                    }
                case 14:
                    {
                        frm_RepAnalisisDistribucion Frm_RepAnalisisDistribucion = new frm_RepAnalisisDistribucion();
                        Frm_RepAnalisisDistribucion.MdiParent = this;
                        Frm_RepAnalisisDistribucion.Show(); 
                        break; 
                    }
                case 15:
                    {
                        frm_AvancesXSKU Frm_AvancesXSKU = new frm_AvancesXSKU();
                        Frm_AvancesXSKU.MdiParent = this;
                        Frm_AvancesXSKU.Show();  
                        break; 
                    }
                case 16:
                    {
                        frm_DevolucionXMotivo Frm_DevolucionXMotivo = new frm_DevolucionXMotivo();
                        Frm_DevolucionXMotivo.MdiParent = this;
                        Frm_DevolucionXMotivo.Show();  
                        break; 
                    }
                case 17:
                    {
                        frm_AnalisisVenta Frm_AnalisisVenta = new frm_AnalisisVenta();
                        Frm_AnalisisVenta.MdiParent = this;
                        Frm_AnalisisVenta.Show();  
                        break; 
                    }
                case 18:
                    {
                        frm_AvancesVenta Frm_AvancesVenta = new frm_AvancesVenta();
                        Frm_AvancesVenta.MdiParent = this;
                        Frm_AvancesVenta.Show();  
                        break; 
                    }
            }
        }

        private void mnuDistribucion_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuDistribucion.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_CambioMasivoModulo Frm_CambioMasivoModulo = new frm_CambioMasivoModulo();
                        Frm_CambioMasivoModulo.MdiParent = this;
                        Frm_CambioMasivoModulo.Show();
                        break;
                    }
                case 1:
                    {
                        frm_SecuenciaLogica Frm_SecuenciaLogica = new frm_SecuenciaLogica();
                        Frm_SecuenciaLogica.MdiParent = this;
                        Frm_SecuenciaLogica.Show();
                        break; 
                    }
            }
        }

        private void mnuSistema_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuSistema.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_AdminUsuarios Frm_AdminUsuarios = new frm_AdminUsuarios();
                        Frm_AdminUsuarios.ShowDialog();  
                        break;
                    }
                case 1:
                    {
                        frm_CambiarContrasenia Frm_CambiarContrasenia = new frm_CambiarContrasenia();
                        Frm_CambiarContrasenia.ShowDialog(); 
                        break;
                    }
                case 3:
                    {
                        //cerrar la session
                        Application.Exit();
                        break; 
                    }
            }
        }

        private void crearMenus()
        {
            //variable para los valores
            String cnom_menu;

            List<InfoMenus> mnus = new List<InfoMenus>();

            for (int i = 0; i < menuStrip.Items.Count; i++)
            {
                //si es visible de agrega
                if (menuStrip.Items[i].Visible)
                {
                    cnom_menu = menuStrip.Items[i].Text;
                    InfoMenus mnu = new InfoMenus(0, ccod_appl, i, cnom_menu, 1, 1, 0, "A", 1);
                    mnus.Add(mnu);
                    //recorrer de forma recursiva por sus hijos
                    recursiveMenuOptions(2, i, (ToolStripMenuItem)menuStrip.Items[i], mnus);
                }
            }

            //si hay items en lista
            if (mnus.Count > 0)
            {
                //declarar variable
                lsis_Sistema lsis_sistema = new lsis_Sistema();

                //guardar en BD
                if (lsis_sistema.doCrearMenus(mnus))
                {
                    //bien
                }
            }


        }

        private void recursiveMenuOptions(int nnivel, int npadre, ToolStripMenuItem mnui, List<InfoMenus> mnus)
        {
            String cnom_menu;

            for (int i = 0; i < mnui.DropDownItems.Count; i++)
            {
                if (mnui.DropDownItems[i].GetType().Name == "ToolStripMenuItem" && mnui.DropDownItems[i].Available)
                {
                    InfoMenus mnu;

                    ToolStripMenuItem mnutool = (ToolStripMenuItem)mnui.DropDownItems[i];
                    cnom_menu = mnutool.Text;
                    //si hay sub items entonces se sigue
                    if (mnutool.DropDownItems.Count > 0)
                    {
                        mnu = new InfoMenus(0, ccod_appl,  i, cnom_menu, nnivel, 1, i, "A", 1);
                        recursiveMenuOptions(nnivel + 1, i, mnutool, mnus);
                    }
                    else
                    {
                        mnu = new InfoMenus(0, ccod_appl, i, cnom_menu, nnivel, 0, npadre, "A", 1);
                    }
                    mnus.Add(mnu);
                }
            }
        }


        private void doEstablecerMenus()
        {
            //si quien ingresa no es el administrador
            int ntip_user = Session.getInfousuario().ctip_user;

            if (ntip_user == 2)
            {
                //recorrer los menus principales
                for (int i = 0; i < menuStrip.Items.Count; i++)
                {
                    //si el menu principal tiene hijos
                    if (((ToolStripMenuItem)menuStrip.Items[i]).DropDownItems.Count > 0)
                    {
                        recursiveMenuHabilita(2, i, (ToolStripMenuItem)menuStrip.Items[i]);
                    }
                }
            }
        }

        private void recursiveMenuHabilita(int nnivel, int npadre, ToolStripMenuItem mnui)
        {            
            lsis_Sistema lsis_sistema = new lsis_Sistema();
            DataTable dtHijos = lsis_sistema.getAdminMenusHijos(npadre, nnivel, Session.getInfousuario().ccod_user, ccod_appl);

            for (int i = 0; i < mnui.DropDownItems.Count; i++)
            {
                if (mnui.DropDownItems[i].GetType().Name == "ToolStripMenuItem" && mnui.DropDownItems[i].Available)
                {
                    ToolStripMenuItem mnutool = (ToolStripMenuItem)mnui.DropDownItems[i];

                    //si hay sub items entonces se sigue
                    if (mnutool.DropDownItems.Count > 0)
                    {

                        recursiveMenuHabilita(nnivel + 1, i, mnutool);
                    }
                    else
                    {
                        //verificar si el menu debe ser habilitado
                        DataRow[] drs = dtHijos.Select("nindex=" + i);
                        if (drs.Length > 0)
                        {
                            mnutool.Enabled = true;
                        }
                        else
                        {
                            mnutool.Enabled = false;
                        }
                    }
                }
            }
        }

    }
}
